package clases.academico;

import CapaDatos.DataSource;
import CapaDatos.Sql;
import global.Dialogos;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;

public class Materia extends Area {

    private int idmateria = 0;
    private String codigo;
    private String materia;
    private String tipoMateria;
    private DataSource dt;
    private String sql;
    public PeriodoCurso curso;

    public Materia() {
        dt = new DataSource();
        curso = new PeriodoCurso();
    }

    public int getIdmateria() {
        return idmateria;
    }

    public void setIdmateria(int idmateria) {
        this.idmateria = idmateria;
    }

    public String getMateria() {
        return materia;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public void setMateria(String materia) {
        this.materia = materia;
    }

    public String getTipoMateria() {
        return tipoMateria;
    }

    public void setTipoMateria(String tipoMateria) {
        this.tipoMateria = tipoMateria;
    }

    public void sacarIdMateria(String materia) {
        sql = "SELECT IDMATERIA FROM MATERIA WHERE MATERIA='" + materia + "'";
        Sql.getConsulta(sql, dt);
        while (dt.next()) {
            this.idmateria = dt.getInt(1);
        }
    }

    private int getMaxMateria() {
        return Sql.getMax("IDMATERIA", "MATERIA", true);
    }

    public boolean guardarMateria() {
        if (this.ExistenciaMateria() == true) {
            global.Mensajes.mostrarMensaje("Advertencia!", "La Materia ya existe...", 2);
            return false;
        } else if (this.ExistenciaCodigo() == true) {
            global.Mensajes.mostrarMensaje("Advertencia!", "El código ya existe...", 2);
            return false;
        } else if (Sql.insertar("INSERT INTO MATERIA VALUES (" + this.getMaxMateria() + ", "
                + "'" + this.codigo + "', " + this.getIdarea() + ", '" + this.materia + "')")) {
            Dialogos.GuardadoconExito();
            this.limpiarMateria();
            return true;
        } else {
            global.Mensajes.mostrarMensaje("Error", "Error al ingresar los datos...!", 3);
            return false;
        }
    }

    public boolean actualizarMateria() {
        if (Sql.actualizar("UPDATE MATERIA SET CODIGO='" + this.codigo + "', IDAREA=" + this.getIdarea() + ", MATERIA='" + this.materia + "' "
                + "WHERE IDMATERIA='" + this.idmateria + "'")) {
            global.Mensajes.mostrarMensaje("Correcto!", "Datos actualizados correctamente...!", 1);
            this.limpiarMateria();
            return true;
        } else {
            global.Mensajes.mostrarMensaje("Error", "Error al actualizar los datos...!", 3);
            return false;
        }

    }

    public boolean EliminarMateria(String materia) {
        if (Sql.isExiste("SELECT * FROM MATERIA WHERE IDMATERIA IN "
                + "(SELECT IDMATERIA FROM MATERIAPERIODOCURSO) "
                + "AND MATERIA='" + materia + "'") == true) {
            Dialogos.Error("La materia esta asignada a un curso... No se puede eliminar");
            return false;
        } else if (global.Mensajes.mostrarPregunta("¿Realmente desea eliminar la materia?") == true) {
            Sql.eliminar("DELETE FROM MATERIA WHERE IDMATERIA NOT IN "
                    + "(SELECT IDMATERIA FROM MATERIAPERIODOCURSO) "
                    + "AND MATERIA='" + materia + "'");
            return true;
        }

        return false;
    }

    public boolean ExistenciaMateria() {
        sql = "SELECT * FROM MATERIA WHERE MATERIA='" + this.materia + "'";
        return Sql.isExiste(sql);
    }

    public boolean ExistenciaMateria(String materia) {
        sql = "SELECT * FROM MATERIA WHERE MATERIA='" + materia + "' AND MATERIA!='" + this.materia + "'";
        return Sql.isExiste(sql);
    }

    public boolean ExistenciaCodigo() {
        sql = "SELECT * FROM MATERIA WHERE CODIGO='" + this.codigo + "'";
        return Sql.isExiste(sql);
    }

    public boolean ExistenciaCodigo(String codigo) {
        sql = "SELECT * FROM MATERIA WHERE CODIGO='" + codigo + "' AND CODIGO!='" + this.codigo + "'";
        return Sql.isExiste(sql);
    }

    public String SqlGeneral() {
        sql = "SELECT CODIGO, MATERIA, AREA FROM MATERIA "
                + "JOIN AREA ON MATERIA.IDAREA=AREA.IDAREA "
                + "ORDER BY (CODIGO) ASC";
        return sql;
    }

    public String SqlMateria(String materia) {
        sql = "SELECT CODIGO, MATERIA, AREA FROM MATERIA "
                + "JOIN AREA ON MATERIA.IDAREA=AREA.IDAREA "
                + " WHERE MATERIA LIKE ('" + materia + "%') ORDER BY (CODIGO) ASC";
        return sql;
    }

    public String SqlCodigo(String codigo) {
        sql = "SELECT CODIGO, MATERIA, AREA FROM MATERIA "
                + "JOIN AREA ON MATERIA.IDAREA=AREA.IDAREA "
                + " WHERE CODIGO LIKE ('" + codigo + "%') ORDER BY (CODIGO) ASC";
        return sql;
    }

    public String SqlArea(String area) {
        sql = "SELECT CODIGO, MATERIA, AREA FROM MATERIA "
                + "JOIN AREA ON MATERIA.IDAREA=AREA.IDAREA "
                + " WHERE AREA = '" + area + "' ORDER BY (CODIGO) ASC";
        return sql;
    }

    public void ConsultaMateria(DefaultTableModel modelo, JTable tabla, String sql, JLabel Lpaginatotal, JLabel Lpagina, int pagina) {
        modelo = new DefaultTableModel() {
            @Override
            public boolean isCellEditable(int fila, int columna) {
                return false;
            }
        };
        tabla.setModel(modelo);
        modelo.addColumn("Nº");
        modelo.addColumn("CODIGO");
        modelo.addColumn("MATERIA");
        modelo.addColumn("AREA");
        DefaultTableCellRenderer centrar = new DefaultTableCellRenderer();
        centrar.setHorizontalAlignment(SwingConstants.CENTER);
        tabla.getColumnModel().getColumn(0).setCellRenderer(centrar);
        TableColumn columna = new TableColumn();
        columna = tabla.getColumnModel().getColumn(0);
        columna.setPreferredWidth(10);
        columna = tabla.getColumnModel().getColumn(1);
        columna.setPreferredWidth(40);
        columna = tabla.getColumnModel().getColumn(2);
        columna.setPreferredWidth(500);
        columna = tabla.getColumnModel().getColumn(3);
        columna.setPreferredWidth(500);
        sql = objPaginacion.getPaginacion(sql, pagina, 50);
        Sql.getConsulta(sql, dt);

        String[] fila;
        int n = (pagina * 50) - 49;
        while (dt.next()) {
            fila = new String[4];
            fila[0] = Integer.toString(n);
            fila[1] = dt.getString(1);
            fila[2] = dt.getString(2);
            fila[3] = dt.getString(3);
            modelo.addRow(fila);
            n++;
        }

        objPaginacion.actualPagina(Lpagina);
        objPaginacion.totalPaginas(Lpaginatotal);
        tabla.getSelectionModel().setSelectionInterval(0, 0);
    }

    public void llenardatosMateria(String materia) {
        sql = "SELECT IDMATERIA, CODIGO, MATERIA, AREA FROM MATERIA "
                + "JOIN AREA ON MATERIA.IDAREA=AREA.IDAREA "
                + "WHERE MATERIA='" + materia + "'";
        Sql.getConsulta(sql, dt);
        while (dt.next()) {
            this.idmateria = dt.getInt(1);
            this.codigo = dt.getString(2);
            this.materia = dt.getString(3);
            this.setArea(dt.getString(4));

        }
    }

    private void limpiarMateria() {
        this.materia = "";
        this.codigo = "";
        this.idmateria = 0;
        this.setIdarea(0);
    }

}
